package utilities;

public class StringUtilities {




   /**
    * Laenge eines Strings anpassen
    */
   public static String pad( String strPaValue , int iPaLen ) {
      if ( strPaValue == null ) strPaValue = "" ;
      StringBuffer strBuff = new StringBuffer( iPaLen ) ;
      strBuff.append( strPaValue ) ;
      if ( strPaValue.length() < iPaLen ) {
         for ( int i = strPaValue.length() ; i <= iPaLen ; i++ ) {
            strBuff.append( " " ) ;
         }
      }
      else {
         strBuff.setLength( iPaLen ) ;
      }
      return strBuff.toString() ;
   } 

   /**
    * Laenge eines Strings anpassen mit links auff�llen mit Leerzeichen
    */
   public static String lpad( String strPaValue , int iPaLen ) {
      if ( strPaValue == null ) strPaValue = "" ;
      StringBuffer strBuff = new StringBuffer( iPaLen ) ;
      if ( strPaValue.length() < iPaLen ) {
         for ( int i = strPaValue.length() ; i <= iPaLen ; i++ ) {
            strBuff.append( " " ) ;
         }
         strBuff.append( strPaValue ) ;
      }
      else {
         // arbeitet hier nicht exakt, links abschneiden noch realisieren
         strBuff.setLength( iPaLen ) ;
      }
      return strBuff.toString() ;
   } 

   /**
    * Standarddatei-Eweiterung Anhaengen
    */
   public static String stdTyp( String strPaFileName , String strPaStdExt ) {
      if ( strPaFileName == null ) return "" ;
      String strTmp = strPaFileName.trim() ;
      if ( strTmp.length() < 5 ) return strTmp + "." + strPaStdExt ;
      int iTmp = strTmp.length() - 4 ;
      if ( strTmp.substring( iTmp , iTmp + 1 ).equals( "." ) ) {
         return strTmp.substring( 0 , iTmp + 1 ) + strPaStdExt ;
      } else  {
         return strTmp + "." + strPaStdExt ;
      }
   }

   /**
    * die soundsovielte Zeile aus einem mehrzeiligem String liefern
    * @param strPaValue    mehrzeiliger String
    * @param iPaLineNumber Zeile ( Basis 0 )
    */
   public static String getLine( String strPaValue , int iPaLineNumber ) {
      String strTmp = new String( strPaValue ) ;
      String strTmpLine = "" ;
      for ( int i = 0 ; i < iPaLineNumber ; i++ ) {
         if ( strTmp.length() < 1 ) return "" ;
         int iEndPos = strTmp.indexOf( "\n" ) > -1 ? strTmp.indexOf( "\n" ) : strTmp.length() ;
         strTmpLine = strTmp.substring( 0 , iEndPos ) ;
         if ( iEndPos < strTmp.length() ) {
            strTmp = strTmp.substring( iEndPos + 1 ) ;
         } else {
            strTmp = "" ;
         }
/*
         // eventuell weiteres Steuerzeichen entfernen
         if ( strTmp.length() > 0 ) {
            if ( strTmp.substring( 0 , 1 ).equals( "\r" ) ) 
            // || strTmp.substring( 0 , 1 ).equals( "\n" ) )
            {
               strTmp = strTmp.substring( 1 ) ;
            }
         }
*/
      }
      return strTmpLine ;
   } 


   /**
    * liefert einen String, der aus Anzahl Wiederholungen eines gelieferten Strings besteht
    *
    * @param String strOne , int anzahl
    */
   public static String repl( String strOne , int anzahl )
   {
      if ( strOne != null ) {
         StringBuffer strbTmp = new StringBuffer( strOne.length() * anzahl ) ;
         for ( int i = 0 ; i < anzahl ; i++ ) {
            strbTmp.append( strOne ) ;
         }
         return strbTmp.toString() ;
      } else {
         return null ;
      }
   }


   /**
    * Umwandeln eines Byte aus dem Recordpuffer oder aus dem Memo-Puffer in ein char<BR>
    * unter Beachtung deutscher Umlaute und Sonderzeichen
    */
   public static char byte2char( byte bPaValue ) {
      char cTmp = (char) bPaValue ;
      if      ( (int) bPaValue == -114 ) cTmp = '\u00C4' ; // �
      else if ( (int) bPaValue == -103 ) cTmp = '\u00D6' ; // �
      else if ( (int) bPaValue == -102 ) cTmp = '\u00DC' ; // �
      else if ( (int) bPaValue == -124 ) cTmp = '\u00E4' ; // �
      else if ( (int) bPaValue == -108 ) cTmp = '\u00F6' ; // �
      else if ( (int) bPaValue == -127 ) cTmp = '\u00FC' ; // �
      else if ( (int) bPaValue ==  -31 ) cTmp = '\u00DF' ; // �
      return cTmp ;
   } 


   /**
    * Umwandeln eines char aus dem Recordpuffer oder aus dem Memo-Puffer in ein byte<BR>
    * unter Beachtung deutscher Umlaute und Sonderzeichen
    */
   public static byte char2byte( char cPaValue ) {
      byte bTmp = (byte) cPaValue ;
      if      ( cPaValue == '\u00C4' ) bTmp = (byte)  -114 ; // �
      else if ( cPaValue == '\u00D6' ) bTmp = (byte)  -103 ; // �
      else if ( cPaValue == '\u00DC' ) bTmp = (byte)  -102 ; // �
      else if ( cPaValue == '\u00E4' ) bTmp = (byte)  -124 ; // �
      else if ( cPaValue == '\u00F6' ) bTmp = (byte)  -108 ; // �
      else if ( cPaValue == '\u00FC' ) bTmp = (byte)  -127 ; // �
      else if ( cPaValue == '\u00DF' ) bTmp = (byte)   -31 ; // �
      return bTmp ;
   } 
	/**
	 * Liefert einen formatierten String aus einem int, indem
	 * es diesen am Anfang mit Leerzeichen auffüllt, so dass 
	 * der String am Ende die Länge length hat.
	 * @param number
	 * 			Zu konvertierende Zahl.
	 * @param length
	 * 			Gewünschte Länge des AusgabeStrings.
	 * @return
	 * 			Formatierter String.
	 */
	public static String formatNumber( int number, int length )  {
		String output = "" + number;
		int lack = length - output.length();
		for ( int i = 0; i < lack; i++ ) {
			output = "  " + output;
		}
		return output;		
	}
	/**
	 * Liefert einen formatierten String aus einem int,
	 * und füllt diesen am Anfang mit Leerzeichen auf,
	 * so dass der String am Ende die Länge 3 hat.
	 * @param number
	 * 			Zu konvertierende Zahl.
	 * @return
	 * 			Formatierter String.
	 */
	public static String formatNumberDefault( int number ) {
		return formatNumber( number, 3 );
	}


}

